const mongoose = require("mongoose");
mongoose.connect(`mongodb://localhost:27017/blog`); // 稍后连接成功后，会触发事件
var db = mongoose.connection;
db.once("open", function () {
  console.log("数据库连接成功 ");
});
db.on("error", function (err) {
  console.log(err); // 连接失败会执行此回调
});

const User = require("./models/user");
const Article = require("./models/article");
// odm -> object

let arr = [];
for (let i = 0; i < 10; i++) {
  arr.push({
    username: "jw" + i,
    password: "jwa" + i,
    address: "abc",
    gender: 1,
  });
}

// 通过集合操作数据库

(async () => {
  // 1）对数据进行增加
  //   let result = await User.create(arr);
  //   console.log(result);
  // 2) 对数据进行查询 基本查询 ， 复杂的条件查询（操作符） ， 分页查询， 关联查询， 聚合查询
  // 正则模糊匹配的性能差
  //   let users = await User.find(
  //     {
  //       //   $or: [{ username: "jw1" }, { username: "jw3" }],
  //       age: { $lt: 30 },
  //     },
  //     { username: 1, gender: 1 } // 表示哪些字段我们要 graphql
  //   );
  // 查询某一个
  //   let user = await User.findOne({ username: "jw1", age: 30 });
  //   let user = await User.findById("65d9f5d8d36361e0506f7956"); // mongoose 的方法
  //   let limit = 3;
  //   let currentPage = 2;
  //   let users = await User.find({})
  //     .limit(limit)
  //     .skip((currentPage - 1) * limit)
  //     .sort({ username: -1 });
  //   console.log(users);
  //   关联查询 通过文章的标题查询用户
  //   let article = await Article.create({
  //     title: "学习mongodb",
  //     content: "查询操作",
  //     user_id: "65d9fa068e20a53d54be1697", // mongose 会自动将值转话存储
  //   });
  //   console.log(article);

  //   let article = await Article.findOne({ title: "学习mongodb" });
  //   let user = await User.findOne({ _id: article.user_id });

  // 关联查询， 采用聚合查询
  //   let user = await Article.findOne({ title: "学习mongodb" }).populate(
  //     "user_id",
  //     { username: 1 }
  //   );

  //   let article = await Article.aggregate([
  //     {
  //       $lookup: {
  //         from: "user",
  //         localField: "user_id", // 我的表的外键，引用了你的主键
  //         foreignField: "_id",
  //         as: "user",
  //       },
  //     },
  //     {
  //       $match: { _id: new mongoose.Types.ObjectId("65d9fb4a0eacb2d2b3bcc1d0") },
  //     },
  //     {
  //       $limit: 1,
  //     },
  //     {
  //       $skip: 0,
  //     },
  //     {
  //       $project: {
  //         user: {
  //           username: 1,
  //           age: 1,
  //         },
  //       },
  //     },
  //     // { 可以用于最终的结果进行分组查询
  //     //   $group: {
  //     //     _id: "$user.username",
  //     //     avgAge: { $avg: "$user.age" },
  //     //   },
  //     // },
  //   ]);

  let article = await Article.deleteOne({ title: "学习mongodb" });
  console.log(article);
})();

setTimeout(() => {
  mongoose.disconnect();
}, 5000);

// 用模型操作数据，还可以用文档来操作
